<?php

/**  控制器 主类
 * Short description.
 * @package     main
 * @subpackage  classes
 * @abstract    Classes defined as abstract may not be instantiated
 */
class Controller
{
	/**
     * 架构函数 取得模板对象实例
     * @access public
     */
    public function __construct() {
      
            $this->_initialize();
    }
	public function _initialize(){
		//在一个try-catch块中包含所有代码，来捕获所有可能的异常!
		
	}
	public function run (){
		try {
			Dispatcher::dispatch();
		  
		  
			// 加载核心惯例配置文件	
			//为何一直失败			
			//C(include CORE_PATH.'Conf/convention.php');


			//获得在POST/GET request中的所有参数
			$params = $_REQUEST;
			//dump($_REQUEST);
			//获取controller并把它正确的格式化使得第一个字母总是大写的
			$controller = ucfirst(strtolower($params['controller']));
			$controller .= "Controller";
			//取消获取action并把它正确的格式化，使它所有的字母都是小写的，并追加一个'Action'
			$action = trim($params['action']);//strtolower($params['action']).'Action';

			//检查controller是否存在。如果不存在，抛出异常
			if( file_exists(CORE_PATH."Libs/Controllers/{$controller}.class.php") ) {
				include_once CORE_PATH."Libs/Controllers/{$controller}.class.php";
			} else {
				throw new Exception('Controller is invalid.');
			}
			//创建一个新的controller实例，并把从request中获取的参数传给它
			$controller = new $controller($params);
		
			//检查controller中是否存在action。如果不存在，抛出异常。
			if( method_exists($controller, $action) === false ) {
				throw new Exception('Action is invalid.');
			}
			
			//执行action
			$result['data'] = $controller->$action();
			$result['success'] = true;
			
		} catch( Exception $e ) {
			//捕获任何一次样并且报告问题
			$result = array();
			$result['success'] = false;
			$result['errormsg'] = $e->getMessage();
		}
		
		//回显调用API的结果
		switch($_SERVER['CONTENT_TYPE']){
			case 'json':
				 // 返回JSON数据格式到客户端 包含状态信息
                header('Content-Type:application/json; charset=utf-8');
                exit(json_encode($result));
			    break;
			case 'xml':
				 // 返回xml格式数据
                header('Content-Type:text/xml; charset=utf-8');
			    echo xml_encode($result);
			    break;
			case 'text':
				header('Content-Type:text/html; charset=utf-8');
				if(is_array($result)){
					$string='';
					foreach($result as $v){
						$string .= $v;
					}
					$result = $string;
				}
			    echo $result;
			    break;
			default:
			    header('Content-Type:application/json; charset=utf-8');
			    echo json_encode($result);
			    break;
		}
		
		exit();
	}

} 